package my12306.table;

/*
 * SwingHTMLPreview.java
 *
 * Created on December 29, 2001, 9:25 PM
 */

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;

/**
 * SwingHTMLPreview
 * little tool for testing the Swing HTML rendering
 * @author  Gordon Mohr gojomo@bitzi.com gojomo@usa.net
 *
 */
public class SwingHTMLPreview extends javax.swing.JFrame implements DocumentListener {
    JTextArea top;
    JEditorPane bottom;
    
    /** Creates a new instance of SwingHTMLPreview */
    public SwingHTMLPreview() {
    }
    
    public static void main(String args[]) {
        SwingHTMLPreview instance = new SwingHTMLPreview();
        instance.init();
        instance.show();
    }

    public void init() {
        Container content = getContentPane();
        content.setBackground(Color.white);
        content.setLayout(new GridLayout(2,1)); 
        
        top = new JTextArea();
        top.setEditable(true);
        top.setLineWrap(true);
        top.setWrapStyleWord(true);
        top.getDocument().addDocumentListener(this);
        JScrollPane topScrollPane = new JScrollPane(top);
        topScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        topScrollPane.setBorder(BorderFactory.createTitledBorder("Raw HTML"));      
        
        bottom = new JEditorPane();
        bottom.setEditable(false);
        bottom.setContentType("text/html");
        JScrollPane bottomScrollPane = new JScrollPane(bottom);
        bottomScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        bottomScrollPane.setBorder(BorderFactory.createTitledBorder("Swing Rendered"));      
        
        content.add(topScrollPane);
        content.add(bottomScrollPane);
        setTitle("SwingHTMLPreview");
        setSize(400,400);
    }
    
    public void insertUpdate(DocumentEvent e) {
        copyContents(e);
    }
    public void removeUpdate(DocumentEvent e) {
        copyContents(e);
    }
    public void changedUpdate(DocumentEvent e) {
        copyContents(e);
    }
    private void copyContents(DocumentEvent e) {
        String backup = bottom.getText();
        // some bad HTML causes the JEditorPane to choke;
        // ignoring the error isn't fatal but causes visual
        // glitching until error is fixed
        // SO, catch it and give clue (via red insertion caret)
        // that something is amiss
        try {
            bottom.setText(top.getText());
            top.setCaretColor(Color.black);
        } catch (Exception ex) {
            bottom.setText(backup);
            top.setCaretColor(Color.red);
        }
    }


}
